#!/bin/sh
# Copyright 2008,2009 Vincent Batts, Birmingham, AL, USA
# Copyright 2010,2011 Vincent Batts, Vienna, VA, USA
#               vbatts@hashbangbash.com, http://hashbangbash.com/
# All rights reserved.
#
# Redistribution and use of this script, with or without modification, is
# permitted provided that the following conditions are met:
#
# 1. Redistributions of this script must retain the above copyright
#    notice, this list of conditions and the following disclaimer.
#
# THIS SOFTWARE IS PROVIDED BY THE AUTHOR ''AS IS'' AND ANY EXPRESS OR IMPLIED
# WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
# MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO
# EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
# SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
# PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS;
# OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY,
# WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
# OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF
# ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

function getPid() {
	pgrep -f 'java.*jenkins.war'
}
pid_file="/var/run/jenkins/jenkins.pid"
max_wait=8

# Define start and stop functions
jenkins_start() {
  p=$(getPid)
  if [ $p ]; then
    echo "jenkins appears to already be running."
    echo "on $p, check it first ..."
    exit 1
  else
    echo "Starting jenkins daemon..."
    install -o jenkins -g jenkins -m 0755 -d /var/run/jenkins
    jenkinsd 2>/dev/null 1>&2 || exit 1
  fi
}

jenkins_stop() {
  echo -ne "Stopping jenkins daemon...  "
  kill $(cat $pid_file) 2>/dev/null >/dev/null

  p=$(getPid)
  if [ ${p} -gt 1 ] 2>/dev/null ; then
    echo "pid ${p}"
    kill ${p}
  else
    echo "jenkins.war not found running"
  fi
}

# See how we were called and take appropriate action	
case $1 in
  start)
    jenkins_start
   ;;
  stop)
    jenkins_stop
   ;;
  restart)
    jenkins_stop
    i=0
    while [ $i -lt $max_wait ] ; do
      if [ $(getPid) ] >/dev/null ; then
        sleep 1
      else
        break
      fi
      i=$[$i+1]
    done
    jenkins_start
   ;;
  *)
    echo "Usage: $0 {start|stop|restart}"
    exit 1
   ;;
esac

